#ifndef __DRAWER_H__
#define __DRAWER_H__

#include "parallelepiped.h"
#include "sphere.h"
#include "pyramid.h"
#include "tetrahedron.h"
#include "cylinder.h"
#include "cone.h"
#include "robot.h"

#include "vec.h"

/*
 * Set up some colours for use
 */
#define  BLACK		0.0,0.0,0.0
#define  BLUE		0.0,0.0,0.7
#define  LIGHT_BLUE 	0.0,0.0,0.2
#define  GREEN		0.0,1.0,0.0
#define  LIGHT_GREEN	0.0,0.15,0.0
#define  CYAN	    	0.0,1.0,1.0
#define  RED	    	1.0,0.0,0.0
#define  LIGHT_RED    	0.98,0.0,0.0
#define  MAGENTA	1.0,0.0,1.0
#define  YELLOW	    	1.0,1.0,0.0
#define  WHITE	    	1.0,1.0,1.0
#define	 ORANGE		1.0,0.5,0.0
#define  BROWN		0.5,0.35,0.05
#define  GRAY			0.5, 0.5, 0.5
#define  NUMSEGS 16

class Drawer {
public:
	//! The method draws the Object of type Parallelepiped
	/*!
	 *  @param para the Parallelepiped object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(Parallelepiped * para, double r, double g, double b);

	//! The method draws the Object of type Sphere
	/*!
	 *  @param sphere the Sphere object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(Sphere * sphere, double r, double g, double b);

	//! The method draws the Object of type Pyramid
	/*!
	 *  @param pyramid the Pyramid object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(Pyramid * pyramid, double r, double g, double b);

	//! The method draws the Object of type Tetrahedron
	/*!
	 *  @param tetra the Tetrahedron object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(Tetrahedron * tetra, double r, double g, double b);

	//! The method draws the Object of type Cylinder
	/*!
	 *  @param cyl the Cylinder object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(Cylinder * cyl, double r, double g, double b);

	//! The method draws the Object of type Cone
	/*!
	 *  @param cone the Cone object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(Cone * cone, double r, double g, double b);

	//! The method draws the Object of type Robot
	/*!
	 *  @param robot the Robot object to be drawn
	 */
	void draw(Robot * robot);

	//! The method draws the Object of type peca
	/*!
	 *  @param peca the piece object to be drawn
	 *  @param r the red component of the color
	 *  @param g the green component of the color
	 *  @param b the blue component of the color
	 */
	void draw(piece * peca, double r, double g, double b);

	//! Constructor
	/*! Just to use the methods
	 */
	Drawer();
};

#endif
